package com.flyqiu.common.sc.calculate;

import com.flyqiu.common.sc.FlyQiuSCContext;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 平均值计算类。
 * 实现了数值平均值的计算功能。
 */
public class FlyQiuAvgCalculate extends FlyQiuNumBaseCalculate {

    public static final String CALCULATE_TYPE_AVG = "avg";

    /**
     * 获取计算类型。
     *
     * @return 计算类型的字符串表示，为 "avg"
     */
    @Override
    public String calculateType() {
        return CALCULATE_TYPE_AVG;
    }

    /**
     * 计算平均值。
     *
     * @param context 上下文对象，包含数据源大小和当前行索引
     * @param cur     当前值
     */
    @Override
    public void calculate(FlyQiuSCContext<?> context, BigDecimal cur) {
        cacheVal = cacheVal.add(cur);

        // 检查是否到达数据源的最后一行
        if (context.getRowIndex() != context.getDataSourceSize() - 1) {
            return;
        }

        // 计算平均值
        int dataSourceSize = context.getDataSourceSize();
        cacheVal = cacheVal.divide(new BigDecimal(dataSourceSize), RoundingMode.HALF_UP);
    }
}
